package modelo.servicio;

import java.util.List;
import modelo.bd.dao.ActividadDAO;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Actividad;

public class Actividades {

    private static Actividades instancia;
    private ActividadDAO dao;

    private Actividades() {
        this.dao = new ActividadDAO();
    }

    public static Actividades instancia() {
        if (instancia == null) {
            instancia = new Actividades();
        }
        return instancia;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return new CloneNotSupportedException("No se puede clonar Areas.");
    }
    
    public List<Actividad> obtenerPorCondicionante(Integer idCondicionante) throws DAOException {
        return dao.selectWhere(" ID_CONDICIONANTE = " + idCondicionante);
    }
    
    public List<Actividad> obtenerPorFechas(String desde, String hasta, Integer area) throws DAOException {
        return dao.selectWhere("ID_AREA=" + area + " AND FECHA BETWEEN CONVERT(DATETIME,'" + desde + "',103) AND CONVERT(DATETIME,'" + hasta + "',103)");
    }

    public List<Actividad> obtenerPorEstado(Integer area, String edo) throws DAOException {
        String cond = "ID_AREA = " + area + " AND ID_HISTORICO IN(SELECT ID_HISTORICO FROM SSMA_HISTORICO_T WHERE ESTADO = '" + edo + "')";
        return dao.selectWhere(cond);
    }

    public List<Actividad> obtenerVencidas(Integer area) throws DAOException {
        String cond = "ID_AREA = " + area + " AND ID_HISTORICO IN(SELECT ID_HISTORICO FROM SSMA_HISTORICO_T WHERE ESTADO = 'NP')";
        return dao.selectWhere(cond);
    }

    public List<Actividad> obtenerResumen(Integer area) throws DAOException {
        String cond = "ID_AREA = " + area + " AND ID_HISTORICO IN(SELECT ID_HISTORICO FROM SSMA_HISTORICO_T WHERE ESTADO IN ('NP', 'PV'))";
        return dao.selectWhere(cond);
    }

    public void actualizar(Actividad act) throws DAOException {
        dao.update(act);
    }

    public Actividad obtener(Integer idActividad) throws DAOException {
        return dao.selectWhere("ID_ACTIVIDAD =" + idActividad).get(0);
    }

    public int obtenerTotal(Integer area) throws DAOException {
        return dao.selectCount(area);
    }
    public long[] obtenerTotales(Integer area) throws DAOException {
        return dao.selectCounts(area);
    }
    
    public void cumplir(Actividad act) throws DAOException {
        dao.update(act);
    }
    
    public void eliminar(Integer idAct) throws DAOException{
        Actividad act = obtener(idAct);
        act.getHistorico().setEstado("IN");
        dao.update(act);
    }
}
